<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 一、自定义迭代器 
        // 每次迭代 value值是 数组的键值 ； done 如果是false 继续可以迭代
        // 如果是true 迭代结束了；
        // function myIterator(arr){
        //     var count = 0;
        //     return function(){
        //         return {
        //             next(){
        //                 return {
        //                     value:arr[count++],
        //                     done:count>arr.length?true:false
        //                 }
        //             }
        //         }

        //     }
        // }

        // var  arr = ["张三","李四","王五"];
        // var iObj = myIterator(arr)();
        // console.log(iObj.next());
        // console.log(iObj.next());
        // console.log(iObj.next());
        // console.log(iObj.next());


        // 二、提供生成器：generator    生成迭代对象 

        // 定义个一生成器函数 
        // function *gen(){  // 生成器函数 ，生成迭代器；
        //     yield "张三";
        //     yield "李四";
        //     yield "王五";
        // }

        // var Iobj = gen();
        // // console.log(Iobj.next());
        // // console.log(Iobj.next());
        // // console.log(Iobj.next());
        // // console.log(Iobj.next());

        // for(let val of Iobj){
        //     console.log(val);
        // }


        // 异步执行 迭代器 ；
        // 这个写法 会被 后面ES8里的async 和 await 取代 ； promise里讲
        function *gen(){
            yield "张安";
            yield "李四";
            yield "王五";
        }

        let Iobj = gen();
        function run(){
             let res = Iobj.next();
             console.log(res );
            if(res.done){
                console.log("所有的执行完毕了");
            }else{
                setTimeout(function(){
                    run();
                }, 1000);

                // setTimeout(run, 1000); 和上面代码写法一样
            }
        }
        run();
        




    </script>
</body>
</html>